/**
 * 将数组中的元素从指定位置移动到新位置，并返回新数组
 * @param array - 需要操作的原始数组
 * @param from - 要移动的元素的原始索引位置
 * @param to - 元素移动的目标位置索引
 * @returns 包含移动结果的新数组（原数组保持不变）
 */
export function arrayMove<T>(array: T[], from: number, to: number): T[] {
  const newArray = array.slice()
  /**
   * 执行元素移动操作
   * 1. 处理负数索引（如-1表示最后一个位置）
   * 2. 从原始位置移除元素
   * 3. 将元素插入到目标位置
   */
  newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0])

  return newArray
}
